Starting to learn Assembly for ARMV8 with a Khadas Vim3 and Ubuntu 24.04

I'm starting to learn assembly for ARMV8(Aarch64). I've got a Khadas Vim 3 board with a Amlogic Cortex A73 processor. I have flashed the eMMC with Ubuntu 24.04 with the USB Burning Tool. To start this off I'm going to follow some tutorials and take some examples from them. I have corrected some errors so I want somewhere to keep track of the code that works.

This is from chapter 2 of Thinkingeek's tutorial

// first.s
.text

.globl main

main:
     mov w0, #2
     ret

Now to assemble it

$ aarch64-linux-gnu-as -c -o first.o first.s

and then link it

$ aarch64-linux-gnu-gcc -static -o first first.o

To run it

$ ./first
$ echo $?
$ 2 

2 is the return

Now let's try a hello world. This is from Peter Nelson's tutorial

// hello.s

.data /* Data segment: define our message string and calculate its length. */
msg:
    .ascii        "Hello, ARM64!\n"
len = . - msg

.text /* Our application's entry point. */
.globl main
main:
    /* syscall write(int fd, const void *buf, size_t count) */
    mov     x0, #1      /* fd := STDOUT_FILENO */
    ldr     x1, =msg    /* buf := msg */
    ldr     x2, =len    /* count := len */
    mov     w8, #64     /* write is syscall #64 */
    svc     #0          /* invoke syscall */

    /* syscall exit(int status) */
    mov     x0, #0      /* status := 0 */
    mov     w8, #93     /* exit is syscall #93 */
    svc     #0          /* invoke syscall */

and again to assemble it

$ aarch64-linux-gnu-as -c -o hello.o hello.s

and then link it

$ aarch64-linux-gnu-gcc -static -o hello hello.o

To run it

$ ./hello
Hello, ARM64!
$ 

That's two working examples for now. I also highly recommend Vega's ARMv8 AArch64/ARM64 Full Beginner's Assembly Tutorial

Proudly powered by an IDE, a Text Editor, and some Internet Searches.

2024 dispelled.ca end of file.